#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
省份地理边界数据提取命令行工具

此脚本提供命令行接口，用于从shapefile中提取省份边界数据、
生成可视化地图和HTML报告。

使用示例:
    python cli.py --shp-path "path/to/省面.shp" \
                 --provinces 北京 上海 广东 \
                 --output-dir "./output"
"""

import argparse
import os
import sys

# 添加父目录到sys.path，确保可以导入gis包
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from scripts.gis.province_utils import process_province_data


def parse_args():
    """
    解析命令行参数
    
    返回:
        解析后的参数命名空间
    """
    parser = argparse.ArgumentParser(description='提取省份地理边界数据并生成报告')
    
    parser.add_argument('--shp-path', type=str, required=True,
                        help='省份shapefile文件路径')
    
    parser.add_argument('--provinces', type=str, nargs='+', required=True,
                        help='要提取的省份名称列表，以空格分隔')
    
    parser.add_argument('--output-dir', type=str, default=None,
                        help='输出目录路径，默认为shapefile所在目录')
    
    parser.add_argument('--csv-filename', type=str, default='province_bounds_detailed.csv',
                        help='输出CSV文件名，默认为province_bounds_detailed.csv')
    
    parser.add_argument('--map-filename', type=str, default='province_map.png',
                        help='输出地图文件名，默认为province_map.png')
    
    parser.add_argument('--html-filename', type=str, default='province_report.html',
                        help='输出HTML报告文件名，默认为province_report.html')
    
    return parser.parse_args()


def main():
    """
    主函数
    """
    args = parse_args()
    
    # 检查shapefile文件是否存在
    if not os.path.exists(args.shp_path):
        print(f"错误: shapefile文件不存在: {args.shp_path}")
        sys.exit(1)
    
    try:
        # 处理省份数据
        result = process_province_data(
            shp_path=args.shp_path,
            target_provinces=args.provinces,
            output_dir=args.output_dir,
            csv_filename=args.csv_filename,
            map_filename=args.map_filename,
            html_filename=args.html_filename
        )
        
        print("\n输出文件:")
        for key, path in result.items():
            print(f"- {key}: {path}")
            
    except Exception as e:
        print(f"错误: {e}")
        sys.exit(1)


if __name__ == '__main__':
    main()